1 poke 2047,67  --> ($07ff) $43
1 poke 1023,66  --> ($03ff) $42
1 poke 670,69   --> ($029e) $45
2 poke 788,52   --> ($0314-$0315 = IRQ    vector) $34
2 poke 792,134  --> ($0318-$0319 = NMINV  vector) $86
2 poke 793,234  --> ($0318-$0319 = NMINV  vector) $ea --> RTI
2 poke 65091,64 --> ($fe43)
2 poke 12340,52 --> ($3034)

3 if peek(56) <> 30 then poke 56,30 : clr   --> ($37-$38 = MEMSIZ) limit basic memory to $1e00

5 if a = 0 then a = 1 :             load "sprites",8,1
6 if a = 1 then a = 2 : sys 16256 : load "hicode",8,1   --> ($3f80)
7 if a = 2 then a = 3 :             load "locode",8,1
10 gosub 2300   --> get filter
10 gosub 900    --> get top ten
10 for i = 1 to 10
10  c0(i) = 1 
10 next

20 n$(0) = "one player game"
20 n$(1) = "two player game"

30 m$(1) = "skill one"
30 m$(2) = "skill two"
30 m$(3) = "skill three"
30 m$(4) = "skill four"

32 poke53280,9  --> ($d020)
34 sys25992     --> ($6588=ShowStartScreen)
35 gosub 400    --> init clock
35 poke53281,1  --> ($d021)
35 print"{clear}"

40 for i = 1 to 200 : next : print" {red}{175*38}"
50 print" {reverse on}{space*6}please select skill level{space*7}"
60 print" {black}{183*38}"
70 for j = 0 to 1
70  print tab(12) "{blue}" n$(j)
70  print tab(12) "{black}{163*15}"
80  for k = 1 to 4
80    print tab(11) j * 4 + k "= " m$(k)
80    print
80  next
80 next
85 if peek(56585) >= 48 then poke 38487,1 : l$ = "1"   --> ($dd09 = TOD seconds) --> ($9657) demo
85 gosub 400        --> init clock
85 goto110

90 get l$
90 if l$ = "" then print "{home}{down*2} {red}{reverse on}{space*31}{home}"
90 goto 40

94 gosub 400        --> init clock
94 if l$ = "f" then gosub 2000 : goto35                 --> change filter settings
96 if l$ = "b" then gosub 2600 : print"{home}" : goto40 --> change back color
98 if l$ = "t" then s(0) = 0                            --> show top ten

98 s(1) = 0
98 poke53281,0      --> ($d021)
98 print"{clear}"
98 gosub 575        --> save?
98 goto 35

100 if l$ < "1" or l$ > "8" then 90

105 poke 38487,0    --> ($9657) game
110 l = val(l$)
110 if l > 4 then 200

120 poke 38400,l    --> ($9600) skill
120 poke 38401,1    --> ($9601) players
120 goto 205

200 poke 38400,l-4  --> ($9600) skill
200 poke38401,2     --> ($9601) players

205 print"{clear}"
210 sys 13255       --> ($33c7) - start game in LOCODE

212 print "{clear}"
215 s = 54272       --> ($d400) SID
215 for i = 0 to 20
215   poke s + i,0
215 next

216 rt = peek(38408)            --> ($9608)
216 if peek(38487) = 0 then 218 --> ($9657)

217 s(0) = 0
217 s(1) = 0
217 poke 53281,0    --> ($d021)
217 print"{clear}"
217 gosub 1300      --> display scores

217 for i = 1 to 10000
217 next
217 goto 219

218 if rt <> 2 then gosub 500

219 gosub 400       --> init clock
219 goto 34

400 for i = 11 to 8 step - 1
400   poke 56576 + i,0    --> ($dd08-$dd0b) - TOD cia2
400 next
400 return

450 open 1,8,15
450 close 1
450 return

500 poke 53281,0    --> ($d021)
500 print"{clear}"
500 gosub 800
520 gosub 1100
530 for ii = 0 to 1
530   x = p(ii)
540   gosub 1300    --> display scores
550   if x then
550     gosub 700   --> txt: enter initials
550     gosub 1500
560   c0(x) = 12
570 next

575 for i = 1 to 10
575   c0(i) = 1
575 next
580 print"{clear}"
580 gosub 1300
590 print : print tab(7) "do you wish to record this"
600 print tab(5) "top ten list on the disk (y/n)"
610 for i = 1 to 5000
610   get a$
610   if a$ = "" then next
610 return

630 if a$ = "y" then gosub 1700
630 return

640 if a$ <> "n" then 610
650 return

700 print : print tab(6) "{white}enter your initials player";ii+1
720 print : print tab(8) "move stick left or right"
730 print tab(10) "push button to enter"
740 return

800 for i = 0 to 1
820   sl% = peek(38731 + i) --> ($974b)
820   sh% = peek(38746 + i) --> ($975a)
830   s1% = sl% / 16
830   s1% = sl% - 6 * s1%
840   s2% = sh% / 16
840   s2% = sh% - 6 * s2%
850   s(i) = s2% * 10000 + s1% * 100
860 next
870 return

900 open2,8,2,"0:topten,s,r"
920 input#2,m$ : input#2,n$ : m$ = m$ + n$ : c=1
930 gosub 1800 --> disk operation check
930 close2
940 for i =1 to 10
950 i$ = "" : for j = 1 to 3 : i$ = i$ + mid$(m$,c,1) : c = c+1 : next
960 i$(i) = i$
970 n$=""
980 x$ = mid$(m$,c,1) : c = c + 1 : if x$ = "/" then 1000
990 n$ = n$ + x$ : goto980
1000 tt(i) = val(n$)
1010 next i
1020 x = fre(0)
1030 return

1100 for i = 1 to 10
1100  c0(i) = 7
1100 next
1120 for i = 0 to 1
1120  p(i) = 0
1130  if s(i) <= tt(10)   then 1200
1140  p = 10
1150  if  s(i) <= tt(p-1) then 1170
1160  p = p - 1
1160  if p > 1  then 1150
1170  if p = 10 then 1190
1180  for j = 10 to p + 1 step - 1
1180    tt(j) = tt(j-1)
1180    c0(j) = c0(j-1)
1180    i$(j) = i$(j-1)
1180  next
1190  tt(p) = s(i)
1190  c0(p) = 1
1190  p(i) = p
1190  i$(p) = "..."
1200 next
1202 if p(0) = 0    then return
1204 if s(0)>= s(1) then return
1206 p(0) = p(0) + 1
1206 if p(0) > 10 then p(0) = 0
1210 return

1300 rem   sub to display scores
1310 print"{home}"
1320 print tab(17) "{white}scores"
1330 print tab(4) "{cyan}player 1" tab(17) "{yellow}{163*6}" tab(28) "{cyan}player 2"
1340 print tab(4) "{orange}{163*8}" tab(28) "{163*8}{white}"

1350 for i = 0 to 1
1350  print tab(24 * i + 11 - len(str$(s(i)))) ; s(i) ;
1350 next
1350 print
1360 print tab(13) "{yellow}{164}{175}{185*10}{175}{164}"
1370 print tab(11) "{red}{195*4}{yellow}{reverse on} {cyan}top  ten{yellow} {red}{reverse off}{195*4}"
1380 print tab(13) "{yellow}{163}{183*12}{163}{white}"
1390 for i = 1 to 10
1390  poke 646,c0(i)  --> ($0286)
1400  print tab(11-int(i / 10)) ; i ; tab(16) ; i$(i) ; tab(29 - len(str$(tt(i)))) ; tt(i)
1410 next
1420 return

1500 as = 1320 + x * 40       --> ($0528)
1500 ac = as - 1024 + 55296   --> ($0400 + $d800)
1500 i$ = ""
1520 for i = 0 to 2
1530  for j = 0 to 2
1530    poke ac + j,15
1530  next
1540  poke ac + i,1
1540  k = 46                  --> ($2e)
1550  for l = 1 to 200
1560    poke as + i,k + 128   --> ($ae)
1560    for h = 1 to 50 : next
1570    n% = (256 + not peek(56320)) and 31 --> ($dc00)
1580    if n% and 16 then 1640
1590    if n% and 4 then
1590      k = k - 1
1590      l = 1
1590      if k = 45 then k = 26
1600    if n% and 8 then
1600      k = k + 1
1600      l = 1
1600      if k = 27 then k = 46
1610    if k < 1 then k = 46
1620    if k > 46 then k = 1
1630  next l
1635  return
1640  if k = 46 then
1640    i$ = i$ + chr$(k)
1640    goto 1660
1650  i$ = i$ +chr$(64 + k)
1660  for h = 1 to 500 : next
1660 next i
1670 i$(x) = i$
1670 return

1700 gosub 450  --> check disk
1700 if st then return

1710 m$ = ""
1710 n$ = ""
1720 for i = 1 to 5
1720  m$ = m$ + i$(i) + str$(tt(i)) + "/"
1720 next
1725 for i = 6 to 10
1725  n$ = n$ + i$(i) + str$(tt(i)) + "/"
1725 next

1730 open 15,8,15,"s0:topten" : close15
1740 open 2,8,2,"0:topten,s,w"
1750 print #2,m$
1750 print #2,n$
1750 gosub 1800 --> disk operation check
1750 close 2
1760 return

1800 open 15,8,15
1820 input #15,a$,b$,c$,d$
1820 close 15

1830 if val(a$) = 0 then return

1840 print"{clear}{down*4}no." tab(5) "message" tab(24) "track" tab(30) "sector"
1850 print a$ tab(5) b$ tab(26) c$ tab(32) d$ : print : print
1860 print "unable to perform disk operation"
1870 print : print "hit <return> to continue"
1880 for i = 1 to 10000
1880  get a$
1880  if a$ <> "" then return
1890 next
1900 return

2000 s = 54272    --> ($d400) SID
2000 for i = 0 to 20
2000  pokes + i,0
2000 next
2020 poke s + 21,0    --> ($d415) SID CUTLO
2020 poke s + 23,247  --> ($d417) SID RESON
2020 poke s + 24,31   --> ($d418) SID SIGVOL

2030 print "{clear}{down*3}changing filter cutoff settings{down*3}"
2040 print "press <f1> to increase"
2050 print "{space*6}<f3> to decrease"
2060 print "   <space> to test sound"
2070 print "{space*7}</> to exit"

2080 c = peek(8256 + 3) --> ($2040)
2080 sys 8289           --> ($2061)
2080 print "{down*3}cutoff freq (hi)" ; c
2090 for i = 1 to 10000
2090  get a$
2090  if a$ = "" then next
2090 return

2100 if a$ = "{f1} " then c = c + 1 : if c > 255 then c = 255 : goto 2150
2110 if a$ = "{f3} " then c = c - 1 : if c < 0   then c = 0   : goto 2150
2120 if a$ = " " then 2150
2125 if a$ = "{f1}" or a$ = "{f3}" then 2150
2130 if a$ = "/" then 2180
2140 goto 2090

2150 poke s + 22,c    --> ($d416) SID CUTHI
2160 sys 8790 : print tab(16) ; "{up}{space*5}{left*5}" ; c
2170 goto 2090

2180 s = c + 16 : if s > 255 then s = 255
2190 poke 8256 + 2,s --> ($2040)
2200 poke 8256 + 3,c --> ($2040)
2200 poke 8256 + 5,c --> ($2040)
2200 poke 8256 + 6,c --> ($2040)
2210 s = c - 16 : if s < 0 then s = 0
2220 poke 8256 + 4,s --> ($2040)
2230 s = c - 22 : if s <0 then s = 0
2240 poke 8256 + 7,s --> ($2040)
2250 print "{clear}{down*3}do you wish to save these"
2255 print "settings to disk (y/n)"
2260 for i = 1 to 10000
2260  get a$
2260  if a$ = "" then next
2260 return

2270 if a$ = "y" then gosub 2400
2280 return

2300 open 2,8,2,"0:filter,s,r"
2320 for i = 0 to 7
2320  input #2,c0(i)
2320 next
2330 close 2
2330 gosub 1800 --> disk operation check
2330 if val(a$) > 0 then 2340
2335 for i = 0 to 7
2335  poke 8256+i,c0(i) --> ($2040)
2335 next
2340 return

2400 gosub 450  --> check disk
2400 if st then return

2410 print "{clear}{down*5}saving filter settings{down}"
2460 open 15,8,15,"s0:filter" : close15
2470 open 2,8,2,"0:filter,s,w"
2480 for i = 0 to 7
2480  c = peek(8256 + i)
2480  print #2,c
2480 next
2490 gosub 1800 --> disk operation check
2490 close 2
2500 return

2600 c = peek(53280) and 15   --> ($d020)
2620 c = c + 1
2620 if c > 15 then c = 1
2630 poke 53280,c             --> ($d020)
2630 return
